package com.bobi.tfca.model.vo;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.annotation.TableId;
import com.bobi.tfca.model.entity.MessageEntity;
import com.bobi.tfca.utils.DateTimeUtil;
import com.google.gson.Gson;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;
import java.sql.Timestamp;
import java.time.LocalDateTime;

/**
 * @author 李文发
 * @date 2024/4/3
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "消息")
public class MessageVO implements Serializable {

    @Serial
    private static final long serialVersionUID = -1979621547544039763L;

    @ApiModelProperty(value = "消息id")
    // 消息id
    private Long messageId;
    @ApiModelProperty(value = "发送者id")
    // 发送者id
    private Integer senderId;
    // 发送者姓名
    @ApiModelProperty(value = "发送者姓名")
    private String senderName;
    @ApiModelProperty(value = "接受者id")
    // 接受者id
    private Integer receiverId;
    // 接收者姓名
    @ApiModelProperty(value = "接收者姓名")
    private String receiverName;
    @ApiModelProperty(value = "消息内容")
    // 消息内容
    private String content;
    @ApiModelProperty(value = "消息内容类型（0：文本，1：图片，2：文件, 3:PING，4：LOGIN）")
    // 消息内容类型（0：文本，1：图片，2：文件, 3:PING，4：LOGIN）
    private Integer contentType;
    @ApiModelProperty(value = "消息属类（0：通知，1：信件，2：群聊）")
    // 消息属类（0：通知，1：信件，2：群聊）
    private Integer category;
    @ApiModelProperty(value = "消息状态（0：已发送，1：已送达，2：已读）")
    // 消息状态（0：已发送，1：已送达，2：已读）
    private Integer messageStatus;
    @ApiModelProperty(value = "发送时间")
    // 发送时间
    private String sendTime;
    @ApiModelProperty(value = "群聊id")
    // 群聊id
    private Integer groupId;
    @ApiModelProperty("消息是否可见")
    private Boolean isTimeVisible;
    @ApiModelProperty("发送人招聘")
    private String senderPicture;

    public static MessageVO ofMessageEntity(MessageEntity entity) {
        MessageVO vo = new MessageVO();
        BeanUtil.copyProperties(entity, vo, "sendTime");
        Timestamp timestamp = entity.getSendTime();
        String sendTime = DateTimeUtil.timestampConvertString(timestamp);
        vo.setSendTime(sendTime);
        return vo;
    }


    public String toJson() {
        Gson gson = new Gson();
        return gson.toJson(this);
    }
}
